# LockNKey Backend Development Makefile
# Provides convenient commands for development and deployment

.PHONY: help build up down logs test clean restart shell db-shell redis-shell

# Default target
help:
	@echo "LockNKey Backend Development Commands"
	@echo "======================================"
	@echo ""
	@echo "Development:"
	@echo "  build       Build all Docker containers"
	@echo "  up          Start all services"
	@echo "  up-dev      Start services with development profile (includes admin tools)"
	@echo "  down        Stop all services"
	@echo "  restart     Restart all services"
	@echo "  logs        View logs from all services"
	@echo "  logs-f      Follow logs from all services"
	@echo ""
	@echo "Testing:"
	@echo "  test        Run test suite"
	@echo "  test-cov    Run tests with coverage report"
	@echo "  lint        Run code linting (ruff)"
	@echo "  format      Format code (ruff + black)"
	@echo ""
	@echo "Database:"
	@echo "  db-shell    Connect to PostgreSQL database"
	@echo "  db-reset    Reset database (WARNING: deletes all data)"
	@echo "  redis-shell Connect to Redis"
	@echo ""
	@echo "Utilities:"
	@echo "  shell       Open shell in quantum service container"
	@echo "  clean       Clean up Docker resources"
	@echo "  ps          Show running containers"

# Development commands
build:
	docker-compose build

up:
	docker-compose up -d
	@echo "Services started. Access:"
	@echo "  - Quantum API: http://localhost:8001"
	@echo "  - API Docs: http://localhost:8001/api/docs"

up-dev:
	docker-compose --profile development up -d
	@echo "Development services started. Access:"
	@echo "  - Quantum API: http://localhost:8001"
	@echo "  - API Docs: http://localhost:8001/api/docs"
	@echo "  - PgAdmin: http://localhost:5050"
	@echo "  - Redis Commander: http://localhost:8081"

down:
	docker-compose down

restart:
	docker-compose restart

logs:
	docker-compose logs

logs-f:
	docker-compose logs -f

ps:
	docker-compose ps

# Testing commands
test:
	docker-compose exec quantum-service python -m pytest app/tests/ -v

test-cov:
	docker-compose exec quantum-service python -m pytest app/tests/ --cov=app --cov-report=html --cov-report=term

lint:
	docker-compose exec quantum-service ruff check app/
	docker-compose exec quantum-service mypy app/

format:
	docker-compose exec quantum-service ruff format app/
	docker-compose exec quantum-service black app/

# Database commands
db-shell:
	docker-compose exec postgres psql -U lockkey_user -d lockkey_quantum

db-reset:
	@echo "WARNING: This will delete all data in the database!"
	@echo "Press Ctrl+C to cancel, or Enter to continue..."
	@read
	docker-compose down -v
	docker-compose up -d

redis-shell:
	docker-compose exec redis redis-cli -a lockkey_redis_password

# Utility commands
shell:
	docker-compose exec quantum-service /bin/bash

clean:
	docker-compose down -v --remove-orphans
	docker system prune -f
	docker volume prune -f

# Quick setup for new developers
setup: build up
	@echo "Waiting for services to start..."
	@sleep 10
	@echo "Running database migrations..."
	@docker-compose exec quantum-service python -c "from app.core.database import init_db; init_db()"
	@echo "Setup complete!"

# Production deployment helpers
deploy-prod:
	@echo "Production deployment not implemented yet"
	@echo "Use deploy-staging for testing"

deploy-staging:
	docker-compose -f docker-compose.yml -f docker-compose.staging.yml up -d

# Health checks
health:
	@echo "Checking service health..."
	@curl -f http://localhost:8001/health || echo "Quantum service: DOWN"
	@docker-compose exec postgres pg_isready -U lockkey_user || echo "PostgreSQL: DOWN"
	@docker-compose exec redis redis-cli -a lockkey_redis_password ping || echo "Redis: DOWN"